package com.example.leetcode.trainingcamp.week5.Thursday;

/**
 * 34. 在排序数组中查找元素的第一个和最后一个位置
 * 给定一个按照升序排列的整数数组 nums，和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
 *
 * 如果数组中不存在目标值 target，返回 [-1, -1]。
 *
 * 进阶：
 *
 * 你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗？
 *
 *
 * 示例 1：
 *
 * 输入：nums = [5,7,7,8,8,10], target = 8
 * 输出：[3,4]
 */
public class Test34 {

    public int[] searchRange(int[] nums, int target) {
        int i = 0;
        int j = nums.length - 1;
        int min = -1;
        int max = -1;
        while (i <= j) {
            int mid = i + (j - i) / 2;
            if (nums[mid] < target) {
                i = mid + 1;
            }
            if (nums[mid] > target) {
                j = mid - 1;
            }
            if (nums[mid] == target) {
                int t = mid - 1;
                while (t >= 0 && nums[t] == target) {
                    t--;
                }
                int t1 = mid + 1;
                while (t1<=nums.length-1 && nums[t1] == target){
                    t1++;
                }
                min = t+1;
                max = t1-1;
                break;
            }
        }
        return new int[]{min,max};
    }
}
